#!/bin/bash

# 网关管理系统一键部署脚本
set -x

echo "🚀 开始部署网关管理系统..."

# 检查 Docker 和 Docker Compose 是否安装
if ! command -v docker &> /dev/null; then
    echo "❌ Docker 未安装，请先安装 Docker"
    exit 1
fi

if ! command -v docker-compose &> /dev/null; then
    echo "❌ Docker Compose 未安装，请先安装 Docker Compose"
    exit 1
fi

# 创建必要的目录
mkdir -p logs config ssl

# 加载环境变量配置文件
if [ -f ".env" ]; then
    echo "📋 加载环境变量配置文件..."
    source .env
fi

# 检查配置文件是否存在，如果不存在则创建默认配置
if [ ! -f "config/config.yaml" ]; then
    echo "⚠️  配置文件不存在，创建默认配置..."
    cat > config/config.yaml << 'EOF'
server:
  host: "0.0.0.0"
  port: 8080
  workers: 4
  enable_cors: true

database:
  connection_string: "postgresql://gateway_user:gateway_password@postgres:5432/gateway_db"
  max_connections: 10
  min_connections: 2
  connect_timeout: 30
  idle_timeout: 300

auth:
  jwt_secret: "your-secret-key-change-in-production"
  token_expiry: 3600
  refresh_token_expiry: 2592000
  password_hash_rounds: 12

gateway:
  default_timeout: 30
  max_retries: 3
  rate_limit_per_minute: 1000
  enable_circuit_breaker: true
  circuit_breaker_threshold: 5
  circuit_breaker_timeout: 60

logging:
  level: "info"
  format: "json"
  enable_file_logging: false
  file_path: "logs/app.log"
  max_file_size: 10485760
  max_files: 5
EOF
    echo "✅ 默认配置文件已创建"
else
    echo "✅ 配置文件已存在，使用现有配置"
fi

# 创建配置覆盖文件（如果不存在）
if [ ! -f "config/override.yaml" ]; then
    echo "📝 创建配置覆盖文件模板..."
    cat > config/override.yaml << 'EOF'
# 配置覆盖文件
# 在此文件中添加需要覆盖的配置项
# 此文件优先级高于 config.yaml

# server:
#   port: 8081
#   host: "0.0.0.0"

# database:
#   connection_string: "postgresql://user:pass@host:port/db"

# auth:
#   jwt_secret: "your-production-secret"
EOF
    echo "✅ 配置覆盖文件模板已创建"
fi

# 生成环境变量配置文件
echo "🔧 生成环境变量配置文件..."
cat > .env << EOF
# 网关管理系统环境变量配置
# 这些变量将覆盖配置文件中的设置

# 服务器配置
SERVER_HOST=${SERVER_HOST:-0.0.0.0}
SERVER_PORT=${SERVER_PORT:-8080}

# 数据库配置
DB_CONNECTION_STRING=${DB_CONNECTION_STRING:-postgresql://gateway_user:gateway_password@postgres:5432/gateway_db}

# 认证配置
JWT_SECRET=${JWT_SECRET:-your-secret-key-change-in-production}

# 日志配置
RUST_LOG=${RUST_LOG:-info}
EOF
echo "✅ 环境变量配置文件已生成"

# 构建 Docker 镜像
echo "📦 构建应用镜像..."
docker-compose build

# 显示当前配置信息
echo "📊 当前配置信息："
echo "   - 服务器地址: ${SERVER_HOST:-0.0.0.0}"
echo "   - 服务器端口: ${SERVER_PORT:-8080}"
echo "   - 数据库连接: ${DB_CONNECTION_STRING:-使用默认配置}"
echo "   - JWT密钥: ${JWT_SECRET:0:10}..."  # 只显示前10个字符

# 启动服务
echo "🚀 启动服务..."
docker-compose up -d

# 等待服务启动
echo "⏳ 等待服务启动..."
sleep 30

# 检查服务状态
echo "🔍 检查服务状态..."
docker-compose ps

# 健康检查
echo "🏥 执行健康检查..."
if curl -f http://localhost:${SERVER_PORT:-8080}/health; then
    echo "✅ 网关服务健康检查通过"
else
    echo "❌ 网关服务健康检查失败"
    docker-compose logs gateway-app
    exit 1
fi

# 显示部署信息
echo ""
echo "🎉 部署完成！"
echo "📊 服务信息："
echo "   - 网关应用: http://localhost:8080"
echo "   - 数据库: localhost:5432"
echo "   - Redis: localhost:6379"
echo "   - Nginx: http://localhost:80"
echo ""
echo "📋 常用命令："
echo "   - 查看日志: docker-compose logs -f"
echo "   - 停止服务: docker-compose down"
echo "   - 重启服务: docker-compose restart"
echo "   - 更新部署: ./deploy.sh"